Step 7: GET bookmarks

Let’s build our API. To that aim, we will build a RESTful HTTP API.

Recall the following HTTP verbs (operations):

  • POST: to create a resource
  • PUT: to update it
  • GET: to read it
  • DELETE: to delete it

We will start with HTTP GET request. We will document our HTTP requests as we implement them:

HTTP MethodGET
API Endpoint/bookmarks
Request Path Parameter
Request Query Parameter
Request Body
Response BodyJSON array of bookmarks
Response Status200

Let’s update the server.js file by adding a new route handler for GET /bookmarks as follows:

import express from "express"; import bookmarks from "./src/routes/bookmarks.js"; const PORT = 3000; const app = express(); app.get("/", (req, res) => { res.send("Welcome to Bookmarks API"); }); app.get("/bookmarks", (req, res) => { res.send("Here are all the bookmarks!"); }) app.listen(PORT, () => { console.log(`Server running at http://localhost:${PORT}/`); });

Routing here refers to determining how an application responds to a client request through a particular endpoint, which is a URI (or path), and a specific HTTP request method (GET, POST, and so on).

Notice at this point, I only send a message about the bookmarks as the response to the GET /bookmarks request. Eventually, I will update this to return a JSON array of bookmarks.

Before going any further, let’s refactor the code. We can add all route handlers to server.js to manage the CRUD operations on bookmarks and other resources/entities we might add to this application in the future (such as Users). The server.js is bound to get larger.

Express has a Router object that enables us moving the routing logic into separate files. We will use the express router to refactor our code.

Create a subfolder routes inside the src folder. Next, create a file bookmarks.js in the routes subfolder with the following content:

import express from "express"; const router = express.Router(); router.get("/bookmarks", (req, res) => { res.send("Here are all the bookmarks!"); }); export default router;

Now update server.js as follows:

import express from "express"; import bookmarks from "./src/routes/bookmarks.js"; const PORT = 3000; const app = express(); app.get("/", (req, res) => { res.send("Welcome to Bookmarks API"); }); app.use(bookmarks); app.listen(PORT, () => { console.log(`Server running at http://localhost:${PORT}/`); });

Run the server and try the endpoint in Postman!

Untitled

Let’s update src/routes/bookmarks.js to return a JSON array of bookmarks:

import express from "express"; import BookmarkDAO from "../data/BookmarkDAO.js"; const router = express.Router(); const bookmarkDao = new BookmarkDAO(); router.get("/bookmarks", (req, res) => { const bookmarks = bookmarkDao.readAll(); res.json({ status: 200, message: `Successfully retrieved ${bookmarks.length} bookmarks!`, data: bookmarks }); }); export default router;

Notice I also provide “status” and “message” in the response. These are good practices in designing APIs.

Rerun the server and try the endpoint again!

Untitled

Save and commit the changes.